﻿package birdry.utils	{
	
	//	birdry.utils.CheckUtil;
	
	
	import flash.events.Event;
	
	public class CheckUtil	{

		
		/**
		* checkJumin("800815","1xxxxxxx");	-->		true;
		* @param	value1	:	주민등록 앞번호
		* @param	value2	:	주민등록 뒷번호
		* @return
		*/
		public static function checkJumin(value1:String, value2:String):Boolean {
			
			//두 개의 텍스트필드에서 값을 전달받아서 편의를 위해 하나로 합침.
			var value:String = String(value1 + value2);

			////////////////////////////////////////////////////////////////////////////////////////////////////////			
			// 기본 입력형태의 검사
			// 졍규표현식 이용
			
			//주민번호의 형태와 7번째 자리(성별) 유효성 검사
			//6자리 숫자 + [1~4]로 시작하는 7자리 숫자
			var pattern:RegExp = /^\d{6}[1234]\d{6}$/;
			var result:Object = pattern.exec(value);
			if(result == null) {
				return false;
			}

			////////////////////////////////////////////////////////////////////////////////////////////////////////
			// N을 11로 나눈 나머지를 11에서 뺀 수가 주민등록번호 마지막 자릿수와 일치하면 정상적인 주민등록번호이다. 
			// (11 - (N % 11)) % 10 = 마지막 자릿수
			
			//비교를 위한 변수
			var chk:Number = 0;
			for (var i:int=0; i<12; i++) {
				chk += ((i%8+2)*Number(value.charAt(i)));
			}
			chk = (11 - (chk%11))%10;

			if (chk != Number(value2.charAt(6))) {
				return false;
			}

			////////////////////////////////////////////////////////////////////////////////////////////////////////
			// 입력된 날짜의 유효성 검사
		
			//1900년대 출생이거나 2000년대 출생.
			//2000년도 이후 출생자의 경우에는 3이 남자, 4가 여자의 의미를 가진다.
			var birthYear = (value.charAt(7) <= "2") ? "19" : "20";
			//앞자리 두개를 붙여 연도 완성
			birthYear += value.substr(0, 2);
			
			//출생달
			var birthMonth = value.substr(2, 2);
			//비교를 위해 1을 빼줌에 유의! Date객체에서 월은 0부터 시작하죠^^
			birthMonth -= 1;
			
			//출생날짜
			var birthDate = value.substr(4, 2);
			
			//출생연도 완성 -> Date로 타입캐스팅.
			//Date() 생성자는 잘못된 일자정보로 생성되었을 경우에는 자동으로 정상적인 일자정보로 재조정해줌~
			var birth = new Date(birthYear, birthMonth, birthDate);

			/*
			//하나씩 확인하고 싶다면...
			trace(birth.getFullYear() == birthYear);
			trace(digit(birth.getMonth()) == birthMonth);
			trace(digit(birth.getDate()) == birthDate);
			*/

			//다시 비교.
			//출생달과 출생일자는 한자리수일 경우 앞에 0을 붙여줘야 문자열과 비교할 수 있음에 유의!^^
			if ( birth.getFullYear() != birthYear || StringUtil.digit(birth.getMonth()) != birthMonth || StringUtil.digit(birth.getDate()) != birthDate) {
				return false;
			}

			////////////////////////////////////////////////////////////////////////////////////////////////////////
			
			return true;
		}
		
		/**
		* checkZipCode
		* @param	value
		* @return
		*/
		public static function checkZipCode(value:String): Boolean	{
			var zipCode:RegExp = /^\d{3}(-\d{3})?$/;
			var _return:Boolean;
			if( zipCode.test(value))	{
				_return = true;
			}	else	{
				_return = false;
			}
			return _return;
		}
		
	}	// class
}	// package